package com.pcjavanet.generate;

import java.lang.reflect.Field;
import java.util.Date;

public class ExtIndexTemplate {
	private Field  fields[];
	private String actionPath ; 
	private String packagepath ="package com.pcjavanet.web.action;\r\n";
	private Class cls;
	private StringBuffer beforeLoadParams = new StringBuffer();
	
	public Class getCls() {
		return cls;
	}
	public void setCls(Class cls) {
		this.cls = cls;
	}
	public String getActionPath() {
		return actionPath;
	}
	public void setActionPath(String actionPath) {
		this.actionPath = actionPath;
	}
	public Field[] getFields() {
		return fields;
	}
	public void setFields(Field[] fields) {
		this.fields = fields;
	}
	//	private Class cls;
	private String createExtObject(Field field){
		StringBuffer buf = new StringBuffer();
		String fname = field.getName();
		buf.append("	{\r\n");
		buf.append(" 			fieldLabel:\""+fname+"\",\r\n");
		buf.append(" 			name:\" "+fname+"\",\r\n");
		buf.append(" 			//allowBlank:false,\r\n");
		buf.append(" 			//blankText:\" 不能为空\"\r\n");
		buf.append("	 } \r\n");
		return buf.toString();
		
	}
	private String getAllFieldsStr(String spaceBlank){
		StringBuffer buf =new StringBuffer();
		for ( int i=0 ; i<fields.length ; i++ ) {
			Field f = fields[i];
			if ( f.getName().indexOf( "ref" ) != -1 ) {
				String bigBeanName = ClassUtil.getBeanNameFromRefFieldName( f.getName() );
				String smaollBeanName = ClassUtil.getLowerStartName( bigBeanName );
				buf.append(spaceBlank).append("	'").append( smaollBeanName) .append(".name',\r\n");
				buf.append(spaceBlank).append("	'").append(f.getName()) .append("',\r\n");
			} else if (f.getType() == Date.class ) {
				buf.append(spaceBlank).append("	{ name: '").append(f.getName()) .append("' , type : 'date' },\r\n");
			} else 
				buf.append(spaceBlank).append("	'").append(f.getName()) .append("',\r\n");
		}
		return buf.toString();
	}

	private String getColumnsStr(String spaceBlank){
		StringBuffer buf =new StringBuffer();
		for ( int i=0 ; i<fields.length ; i++ ) {
			Field f = fields[i];
			if ( f.getType().getPackage() .equals( cls.getPackage() )) 
				continue ; 
			if ( f.getType() == Date.class ) {
				buf.append(	spaceBlank).append("{ text :'").append(f.getName()) .append("'").append(", flex : 1 , sortable : true , dataIndex :'").append( f.getName()).append("' , renderer:Ext.util.Format.dateRenderer('Y-m-d'), },\r\n");
			} else if ( f.getName().indexOf("ref") !=-1 ) {
				String bigBeanName = ClassUtil.getBeanNameFromRefFieldName( f.getName() );
				String smallBeanName = ClassUtil.getLowerStartName( bigBeanName );
				buf.append(	spaceBlank).append("{ text :'").append( bigBeanName ) .append(" Name '").append(", flex : 1 , sortable : true , dataIndex :'").append( smallBeanName ).append(".name' },\r\n");
				buf.append(	spaceBlank).append("{ text :'").append(f.getName()) .append("'").append(", flex : 1 , sortable : true , hidden : true , dataIndex :'").append( f.getName()).append("' },\r\n");
			} else if ( f.getName().equalsIgnoreCase("dbid")){
				  buf.append(	spaceBlank).append("{ text :'").append(f.getName()) .append("'").append(", flex : 1 , sortable : true , hidden : true , dataIndex :'").append( f.getName()).append("' },\r\n");
			} else {	
				buf.append(	spaceBlank).append("{ text :'").append(f.getName()) .append("'").append(", flex : 1 , sortable : true , dataIndex :'").append( f.getName()).append("' },\r\n");
			}
		}
		return buf.toString();
	}
	
	private String getUpdateFormFields( String spacleBlank ){
		StringBuffer buf = new StringBuffer();
		buf.append( spacleBlank ).append("items :[\r\n");
		for ( int i=0 ; i<fields.length ; i++ ) {
			Field f = fields[i];
			if ( f.getType().getPackage().equals( cls.getPackage() )  )
				continue ; 
			buf.append( spacleBlank ).append(" { \r\n");
			
			if ( f.getType() == Date.class ) {
				buf.append( spacleBlank ).append("		xtype: 'datefield',\r\n");
				buf.append( spacleBlank ).append("		format: 'Y-m-d H:i:s',\r\n");
				buf.append( spacleBlank ).append("		fieldLabel: '" ).append( f.getName()).append("'").append(",\r\n");
			} else 	if ( f.getType() == Integer.class  || f.getType() == int .class || f.getType() == long.class ||
					f.getType() == Long.class  || f.getType() == Float.class || f.getType() == float.class  
					|| f.getType() == Double.class || f.getType() == double.class) {
				if ( f.getName().indexOf("ref") !=-1 ) {
					String  bigBeanName = ClassUtil.getBeanNameFromRefFieldName( f.getName() );
					String  smallBeanName = ClassUtil.getLowerStartName( bigBeanName );
					buf.append( spacleBlank ).append("		xtype: 'combo',\r\n");
					buf.append( spacleBlank ).append("		store: { xtype :'Ext.data.Store', fields:['dbid','name'],proxy :{ type:'ajax',url:'<%=request.getContextPath() %>/"+smallBeanName+"/list"+bigBeanName+".action', reader : { type : 'json' , root : '"+smallBeanName+"PageBeans'} } ,autoLoad: true },\r\n");
					buf.append( spacleBlank ).append("		valueField:'dbid', \r\n");
					buf.append( spacleBlank ).append("		displayField:'name', \r\n");
					buf.append( spacleBlank ).append("	//	 blankText:'Please Select', \r\n");
					buf.append( spacleBlank ).append("	//	  editable : false, , \r\n");
					buf.append( spacleBlank ).append("	//	 emptyText:'please Select', \r\n");
					buf.append( spacleBlank ).append("	//	 forceSelection: true, \r\n");
					buf.append( spacleBlank ).append("		fieldLabel: '" ).append(  bigBeanName ).append("'").append(",\r\n");
				} else {
					buf.append( spacleBlank ).append("		xtype: 'numberfield',\r\n");
					buf.append( spacleBlank ).append("		fieldLabel: '" ).append( f.getName()).append("'").append(",\r\n");
				}
			}  else if ( f.getType() == Boolean.class || f.getType() == boolean.class ) {
				buf.append( spacleBlank ).append("		xtype: 'checkbox',\r\n");
				buf.append( spacleBlank ).append("		fieldLabel: '" ).append( f.getName()).append("'").append(",\r\n");
			} else {
				buf.append( spacleBlank ).append("		xtype: 'textfield',\r\n");
				buf.append( spacleBlank ).append("		fieldLabel: '" ).append( f.getName()).append("'").append(",\r\n");
			}
			buf.append( spacleBlank ).append("		name: '" ).append( f.getName()).append("'").append(",\r\n");
			buf.append( spacleBlank ).append("		id: '" ).append( f.getName()).append("'").append(",\r\n");
			if ( f.getName().equalsIgnoreCase("dbid") )
				buf.append( spacleBlank ).append("		readOnly: true,\r\n");
			buf.append( spacleBlank ).append(" }, \r\n");
		 
		}
		buf.append( spacleBlank ).append("],\r\n");
		buf.append( spacleBlank ).append(" buttons :[\r\n");
		buf.append( spacleBlank ).append(" { \r\n");
		buf.append( spacleBlank ).append("		xtype: 'button',\r\n");
		buf.append( spacleBlank ).append("		text: 'Save'").append(",\r\n");
		buf.append( spacleBlank ).append("		name: 'SaveUppdateBtn'").append(",\r\n");
		buf.append( spacleBlank ).append("		id: 'SaveUppdateBtn'").append(",\r\n");
		buf.append( spacleBlank ).append("		handler:  function (){ \r\n");
		buf.append( spacleBlank ).append("			     this.up('form').getForm().doAction('submit',{ \r\n");
        buf.append( spacleBlank ).append("		             url:'<%=request.getContextPath() %>/"+ClassUtil.getLowerStartName(cls.getSimpleName()) +"/update"+ cls.getSimpleName() +".action', \r\n");
        buf.append( spacleBlank ).append("		             method:'post', \r\n");
        buf.append( spacleBlank ).append("		             params:'', \r\n");  
        buf.append( spacleBlank ).append("		             success:function(form,action){ \r\n");
        buf.append( spacleBlank ).append("		                 Ext.Msg.alert('UPdate Success',action.result.info); \r\n");
        buf.append( spacleBlank ).append("		                 popWindow.close(); \r\n");
        buf.append( spacleBlank ).append("		                 store.reload(); \r\n");
        buf.append( spacleBlank ).append("		             }, \r\n");
        buf.append( spacleBlank ).append("		             failure:function(e){ \r\n");
        buf.append( spacleBlank ).append("		           	  console.info( e); \r\n");
        buf.append( spacleBlank ).append("		                  Ext.Msg.alert('error','Fail！'); \r\n");
        buf.append( spacleBlank ).append("		             } \r\n");
        buf.append( spacleBlank ).append("		           }); \r\n");
		buf.append( spacleBlank ).append("		}").append(",\r\n");
		buf.append( spacleBlank ).append(" }, \r\n");
		buf.append( spacleBlank ).append(" { \r\n");
		buf.append( spacleBlank ).append("		xtype: 'button',\r\n");
		buf.append( spacleBlank ).append("		text: 'Reset'").append(",\r\n");
		buf.append( spacleBlank ).append("		name: 'ResetUpdateBtn'").append(",\r\n");
		buf.append( spacleBlank ).append("		id: 'ResetUpdateBtn'").append(",\r\n");
		buf.append( spacleBlank ).append("		handler:  function (){  this.up('form').getForm().reset();}").append(",\r\n");
		buf.append( spacleBlank ).append(" }, \r\n");
		buf.append( spacleBlank ).append(" { \r\n");
		buf.append( spacleBlank ).append("		xtype: 'button',\r\n");
		buf.append( spacleBlank ).append("		text: 'Close'").append(",\r\n");
		buf.append( spacleBlank ).append("		name: 'CloseAddBtn'").append(",\r\n");
		buf.append( spacleBlank ).append("		id: 'CloseAddBtn'").append(",\r\n");
		buf.append( spacleBlank ).append("		handler:  function (){  popWindow.close();}").append(",\r\n");
		buf.append( spacleBlank ).append(" }, \r\n");
		buf.append( spacleBlank ).append(" ] \r\n");
		
		return buf.toString();
	}
	
	private String getAddFormFields(String spacleBlank){
		StringBuffer buf = new StringBuffer();
		buf.append( spacleBlank ).append("items :[\r\n");
		for ( int i=0 ; i< fields.length ; i++ ) {
			Field f = fields[i];
			if (   f.getName().equalsIgnoreCase("dbid")  || f.getType().getPackage().equals( cls.getPackage() ) ) {
				
			} else {
				buf.append( spacleBlank ).append(" { \r\n");
				if ( f.getType() == Date.class ) {
					buf.append( spacleBlank ).append("		xtype: 'datefield',\r\n");
					buf.append( spacleBlank ).append("		format: 'Y-m-d H:i:s',\r\n");
					buf.append( spacleBlank ).append("		fieldLabel: '" ).append( f.getName()).append("'").append(",\r\n");
				} else 	if ( f.getType() == Integer.class  || f.getType() == int .class || f.getType() == long.class ||
						f.getType() == Long.class  || f.getType() == Float.class || f.getType() == float.class  
						|| f.getType() == Double.class || f.getType() == double.class) {
					if ( f.getName().indexOf("ref") !=-1 ) {
						String  bigBeanName = ClassUtil.getBeanNameFromRefFieldName( f.getName() );
						String  smallBeanName = ClassUtil.getLowerStartName( bigBeanName );
						buf.append( spacleBlank ).append("		xtype: 'combo',\r\n");
						buf.append( spacleBlank ).append("		store: { xtype :'Ext.data.Store', fields:['dbid','name'],proxy :{ type:'ajax',url:'<%=request.getContextPath() %>/"+smallBeanName+"/list"+bigBeanName+".action', reader : { type : 'json' , root : '"+smallBeanName+"PageBeans'} } ,autoLoad: true },\r\n");
						buf.append( spacleBlank ).append("		valueField:'dbid', \r\n");
						buf.append( spacleBlank ).append("		displayField:'name', \r\n");
						buf.append( spacleBlank ).append("	//	 blankText:'Please Select', \r\n");
						buf.append( spacleBlank ).append("	//	  editable : true , \r\n");
						buf.append( spacleBlank ).append("	//	 emptyText:'please Select', \r\n");
						buf.append( spacleBlank ).append("	//	 forceSelection: true, \r\n");
						buf.append( spacleBlank ).append("		fieldLabel: '" ).append(  bigBeanName ).append("'").append(",\r\n");
					} else {
						buf.append( spacleBlank ).append("		xtype: 'numberfield',\r\n");
						buf.append( spacleBlank ).append("		fieldLabel: '" ).append( f.getName()).append("'").append(",\r\n");
					}
				}  else if ( f.getType() == Boolean.class || f.getType() == boolean.class ) {
					buf.append( spacleBlank ).append("		xtype: 'checkbox',\r\n");
					buf.append( spacleBlank ).append("		fieldLabel: '" ).append( f.getName()).append("'").append(",\r\n");
				} else {
					buf.append( spacleBlank ).append("		xtype: 'textfield',\r\n");
					buf.append( spacleBlank ).append("		fieldLabel: '" ).append( f.getName()).append("'").append(",\r\n");
				}
				buf.append( spacleBlank ).append("		name: '" ).append( f.getName()).append("'").append(",\r\n");
				buf.append( spacleBlank ).append("		id: '" ).append( f.getName()).append("'").append(",\r\n");
				buf.append( spacleBlank ).append(" }, \r\n");
			}
		}
		buf.append( spacleBlank ).append("],\r\n");
		buf.append( spacleBlank ).append(" buttons :[\r\n");
		buf.append( spacleBlank ).append(" { \r\n");
		buf.append( spacleBlank ).append("		xtype: 'button',\r\n");
		buf.append( spacleBlank ).append("		text: 'Save'").append(",\r\n");
		buf.append( spacleBlank ).append("		name: 'SaveAddBtn'").append(",\r\n");
		buf.append( spacleBlank ).append("		id: 'SaveAddBtn'").append(",\r\n");
		buf.append( spacleBlank ).append("		handler:  function (){ \r\n");
		buf.append( spacleBlank ).append("			     this.up('form').getForm().doAction('submit',{ \r\n");
		buf.append( spacleBlank ).append("		             url:'<%=request.getContextPath() %>/"+ClassUtil.getLowerStartName(cls.getSimpleName()) +"/insert"+ cls.getSimpleName() +".action', \r\n");
		buf.append( spacleBlank ).append("		             method:'post', \r\n");
		buf.append( spacleBlank ).append("		             params:'', \r\n");  
		buf.append( spacleBlank ).append("		             success:function(form,action){ \r\n");
		buf.append( spacleBlank ).append("		                 Ext.Msg.alert('Add Success',action.result.info); \r\n");
		buf.append( spacleBlank ).append("		                 popWindow.close(); \r\n");
		buf.append( spacleBlank ).append("		                 store.reload(); \r\n");
		buf.append( spacleBlank ).append("		             }, \r\n");
		buf.append( spacleBlank ).append("		             failure:function(e){ \r\n");
		buf.append( spacleBlank ).append("		           	  console.info( e); \r\n");
		buf.append( spacleBlank ).append("		                  Ext.Msg.alert('error','Fail！'); \r\n");
		buf.append( spacleBlank ).append("		             } \r\n");
		buf.append( spacleBlank ).append("		           }); \r\n");
		buf.append( spacleBlank ).append("		}").append(",\r\n");
		buf.append( spacleBlank ).append(" }, \r\n");
		buf.append( spacleBlank ).append(" { \r\n");
		buf.append( spacleBlank ).append("		xtype: 'button',\r\n");
		buf.append( spacleBlank ).append("		text: 'Reset'").append(",\r\n");
		buf.append( spacleBlank ).append("		name: 'ResetAddBtn'").append(",\r\n");
		buf.append( spacleBlank ).append("		id: 'ResetAddBtn'").append(",\r\n");
		buf.append( spacleBlank ).append("		handler:  function (){  this.up('form').getForm().reset();}").append(",\r\n");
		buf.append( spacleBlank ).append(" }, \r\n");
		buf.append( spacleBlank ).append(" { \r\n");
		buf.append( spacleBlank ).append("		xtype: 'button',\r\n");
		buf.append( spacleBlank ).append("		text: 'Close'").append(",\r\n");
		buf.append( spacleBlank ).append("		name: 'CloseAddBtn'").append(",\r\n");
		buf.append( spacleBlank ).append("		id: 'CloseAddBtn'").append(",\r\n");
		buf.append( spacleBlank ).append("		handler:  function (){  popWindow.close();}").append(",\r\n");
		buf.append( spacleBlank ).append(" }, \r\n");
		buf.append( spacleBlank ).append(" ] \r\n");
		
		return buf.toString();
	}
      
	public String createAddWindow(String spaceBlank){
		StringBuffer buf = new StringBuffer();
		buf.append(spaceBlank).append("{ xtype: 'button', text: 'Add',tooltip: 'Add New Row',\r\n");
		buf.append(spaceBlank).append("	handler:  function (){\r\n");
		buf.append(spaceBlank).append("		var popWindow = new Ext.Window({\r\n");
		buf.append(spaceBlank).append("			id : 'Add"+  cls.getSimpleName()  +"Window',\r\n");
//		buf.append(spaceBlank).append("			//autoDestroy : true ,\r\n");
		buf.append(spaceBlank).append("    		width : 600,\r\n");
		buf.append(spaceBlank).append("    		title : 'Add New Record.', \r\n");
		buf.append(spaceBlank).append("    		closable: true, \r\n");
		buf.append(spaceBlank).append("    		resizable: true,\r\n");
		buf.append(spaceBlank).append("    		constrainHeader: true,\r\n");
		buf.append(spaceBlank).append("    		modal: true,\r\n");
		buf.append(spaceBlank).append("    	    plain: true, \r\n");
		buf.append(spaceBlank).append("    		layout : 'fit',\r\n");
		buf.append(spaceBlank).append("    		x : 250, y : 100,\r\n");
		buf.append(spaceBlank).append("    		items :[{\r\n");
		buf.append(spaceBlank).append("    			xtype: 'form',\r\n");
		buf.append(spaceBlank).append("    			layout: 'form',\r\n");
		buf.append(spaceBlank).append("    			frame: true,\r\n");
		buf.append(spaceBlank).append("    			bodyPadding: '2 2 0',\r\n");
		buf.append(spaceBlank).append("    			fieldDefaults: {\r\n");
		buf.append(spaceBlank).append("    				msgTarget: 'side',\r\n");
		buf.append(spaceBlank).append("    				labelWidth: 75\r\n");
		buf.append(spaceBlank).append("    			},\r\n");
		buf.append(spaceBlank).append("    			defaultType: 'textfield',\r\n");
		buf.append(getAddFormFields(spaceBlank+"    			"));
		buf.append(spaceBlank).append("    		}]\r\n");
		buf.append(spaceBlank).append("    	});\r\n");
		buf.append(spaceBlank).append("		popWindow.show();\r\n");
		buf.append(spaceBlank).append("	}\r\n");
		buf.append(spaceBlank).append("} ,\r\n");
		return buf.toString();
	}
	
	public String createUpdateWindow(String spaceBlank){
		StringBuffer buf = new StringBuffer();
		buf.append(spaceBlank).append("{ xtype: 'button', text: 'Update',tooltip: 'Update Row',\r\n");
		buf.append(spaceBlank).append("	handler:  function (){\r\n");
		
		buf.append(spaceBlank).append("		var grid = this.ownerCt.ownerCt; \r\n");
		buf.append(spaceBlank).append("		var checkRecord = grid.getSelectionModel().getSelection(); \r\n");
		
		buf.append(spaceBlank).append("		if (checkRecord.length != 0) {\r\n");
		buf.append(spaceBlank).append("			var popWindow = new Ext.Window({\r\n");
		buf.append(spaceBlank).append("				id : 'updateWindow',\r\n");
//		buf.append(spaceBlank).append("				//autoDestroy : true ,\r\n");
		buf.append(spaceBlank).append("    			width : 600,\r\n");
		buf.append(spaceBlank).append("    			title : 'Update Record.', \r\n");
		buf.append(spaceBlank).append("    			closable: true, \r\n");
		buf.append(spaceBlank).append("    			resizable: true,\r\n");
		buf.append(spaceBlank).append("    			constrainHeader: true,\r\n");
		buf.append(spaceBlank).append("    			modal: true,\r\n");
		buf.append(spaceBlank).append("    	   		plain: true, \r\n");
		buf.append(spaceBlank).append("    			layout : 'fit',\r\n");
		buf.append(spaceBlank).append("    			x : 250, y : 100,\r\n");
		buf.append(spaceBlank).append("    			items :[{\r\n");
		buf.append(spaceBlank).append("    				xtype: 'form',\r\n");
		buf.append(spaceBlank).append("    				id: 'updateForm',\r\n");
		buf.append(spaceBlank).append("    				layout: 'form',\r\n");
		buf.append(spaceBlank).append("    				frame: true,\r\n");
		buf.append(spaceBlank).append("    				bodyPadding: '2 2 0',\r\n");
		buf.append(spaceBlank).append("    				fieldDefaults: {\r\n");
		buf.append(spaceBlank).append("    					msgTarget: 'side',\r\n");
		buf.append(spaceBlank).append("    					labelWidth: 75\r\n");
		buf.append(spaceBlank).append("    				},\r\n");
		buf.append(spaceBlank).append("    				defaultType: 'textfield',\r\n");
		buf.append( getUpdateFormFields(spaceBlank+"    			"));
		buf.append(spaceBlank).append("    			}]\r\n");
		buf.append(spaceBlank).append("    		});\r\n");
		buf.append(spaceBlank).append("			popWindow.show();\r\n");		
		buf.append(spaceBlank).append("			Ext.getCmp(\"updateForm\").getForm().loadRecord(checkRecord[0]);\r\n");
		buf.append( createUpdateForRefField( spaceBlank+"		") ); 
		buf.append(spaceBlank).append("		}").append("else{\r\n");
        String deleMsg = "";
		try {
			deleMsg = new String("错误提示','请至少选择一条信息!".getBytes("UTF-8" ) );
		} catch (Exception e) {
			e.printStackTrace();
		}
        buf.append(spaceBlank).append("			Ext.MessageBox.alert('"+deleMsg+"');\r\n");
        buf.append(spaceBlank).append("      }\r\n");		
        buf.append(spaceBlank).append("    }\r\n");
		buf.append(spaceBlank).append("} , \r\n");
		return buf.toString();
	}
	private String createUpdateForRefField(String spaceBlank){
		StringBuffer buf = new StringBuffer ();
		Field[] fs =ClassUtil.getAllRefFields(fields);
		for( int i  = 0 ; i < fs.length ; i++ ) {
			buf.append(spaceBlank).append("	Ext.getCmp(\"updateForm\").getForm().findField(\""+ fs[i].getName()+"\").setValue( checkRecord[0].data[\""+ fs[i].getName()+"\"]);\r\n");
		}
		return buf.toString();
	}
	private String createDeleteWindow(String spaceBlank){
		StringBuffer buf = new StringBuffer();
		buf.append(spaceBlank).append("{ xtype: 'button', text: 'Delete',tooltip: 'Delete Row',\r\n");
		buf.append(spaceBlank).append("	handler:  function (){\r\n");
		buf.append(spaceBlank).append("		var grid = this.ownerCt.ownerCt;\r\n");
		buf.append(spaceBlank).append("	 Ext.MessageBox.confirm('Confirm', 'Are you sure you want to do that?',\r\n"); 
		buf.append(spaceBlank).append("			 function showResult(btn,text){\r\n");
		buf.append(spaceBlank).append("			 	if (btn == \"yes\"){\r\n");
        buf.append(spaceBlank).append("					var store = grid.getStore();\r\n");
        buf.append(spaceBlank).append("					var checkRecord = grid.getSelectionModel().getSelection();\r\n");
        buf.append(spaceBlank).append("					if (checkRecord.length != 0) {\r\n");
        buf.append(spaceBlank).append("						Ext.Ajax.request({\r\n");
        buf.append(spaceBlank).append("							url : '<%=request.getContextPath() %>/"+ ClassUtil.getLowerStartName(  cls.getSimpleName() )+"/delete"+   cls.getSimpleName() +".action',\r\n");
        buf.append(spaceBlank).append("							params : { dbid : checkRecord[0].data[\"dbid\"] },\r\n");
        buf.append(spaceBlank).append("							success : function(response, options) {},\r\n");
        buf.append(spaceBlank).append("						});\r\n");
        buf.append(spaceBlank).append("						store.remove(checkRecord);\r\n");
        buf.append(spaceBlank).append("					}").append("else{\r\n");
        String deleMsg = "";
		try {
			deleMsg = new String("错误提示','请至少选择一条信息!".getBytes("UTF-8" ),"UTF-8" );
		} catch (Exception e) {
			e.printStackTrace();
		}
        buf.append(spaceBlank).append("						Ext.MessageBox.alert('"+deleMsg+"');\r\n");
        buf.append(spaceBlank).append("       				}\r\n");
		buf.append(spaceBlank).append("				}\r\n");
		buf.append(spaceBlank).append("			}\r\n");
		buf.append(spaceBlank).append("		);\r\n");
		buf.append(spaceBlank).append("	}\r\n");
		buf.append(spaceBlank).append("}\r\n");
		return buf.toString();
	}
	
	private String createGridPanel(String spaceBlank){
		StringBuffer buf = new StringBuffer();
		buf.append(spaceBlank).append("var gridPanel= Ext.create('Ext.grid.GridPanel', {\r\n ");
		buf.append(spaceBlank).append("	store: store,    \r\n");
		buf.append(spaceBlank).append("	selModel : Ext.create('Ext.selection.CheckboxModel',{   mode: 'SINGLE' }),\r\n");
		buf.append(spaceBlank).append("	columnLines: true,\r\n");
		buf.append(spaceBlank).append("	columns: [\r\n");
		buf.append( getColumnsStr(spaceBlank+"			"));
		buf.append(spaceBlank).append("	],\r\n");
		buf.append(spaceBlank).append("	height: 350,\r\n");
		buf.append(spaceBlank).append("	width: 600,\r\n");
	   	buf.append(spaceBlank).append("	tbar: new Ext.Toolbar({\r\n");
		buf.append(spaceBlank).append("		height : '32' , autoWidth:true, autoShow:true,\r\n");
   		buf.append(spaceBlank).append("		items:[\r\n");
   		buf.append( createAddWindow(spaceBlank +"		") );
   		buf.append( createUpdateWindow(spaceBlank +"		") );
   		buf.append( createDeleteWindow(spaceBlank +"		") );
		buf.append(spaceBlank).append("	] \r\n");
		buf.append(spaceBlank).append("}) ,\r\n");
		buf.append(spaceBlank).append("viewConfig : { forceFit : true, scrollOffset : 0 },\r\n");
		buf.append(spaceBlank).append("dockedItems: [{ xtype: 'pagingtoolbar', store: store,  dock: 'bottom', displayInfo: true  }],\r\n");
		buf.append(spaceBlank).append("title: '" +  cls.getSimpleName() +" List ',\r\n");
//	  	buf.append(spaceBlank).append("			renderTo: Ext.getBody(),\r\n");
	  	buf.append(spaceBlank).append("}); \r\n");		
		return buf.toString();
	}
	
	public  String createPageBody(){
		StringBuffer buf  = new  StringBuffer();
		buf.append("<%@ page language=\"java\" contentType=\"text/html; charset=UTF-8\"    pageEncoding=\"UTF-8\"%> \r\n");
		buf.append("<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\r\n");
		buf.append("<html> \r\n");
		buf.append("<head>\r\n");
		buf.append("<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">\r\n");
		buf.append("<title></title>\r\n");
		buf.append("<link href=\"<%=request.getContextPath() %>/ext/resources/css/ext-all.css\" rel=\"stylesheet\" type=\"text/css\" />\r\n");
		buf.append("<script type=\"text/javascript\" src=\"<%=request.getContextPath() %>/ext/ext-all.js\"></script>\r\n");
		buf.append("</head>\r\n");
		buf.append("<script type=\"text/javascript\">\r\n");
		buf.append("	Ext.onReady(function(){\r\n");
		buf.append("		var itemsPerPage = 10;\r\n");
		buf.append("		var store=new Ext.data.Store({ \r\n"); 
		buf.append("			pageSize: itemsPerPage, \r\n");
		buf.append("			fields : [\r\n");
		buf.append( getAllFieldsStr("			") );
		buf.append("    		],\r\n");	
		buf.append("    		proxy : {  \r\n");
		buf.append("   				type : 'ajax', \r\n");
		buf.append("				url : '<%=request.getContextPath() %>/" + ClassUtil.getLowerStartName(  cls.getSimpleName() ) + "/list"+ cls.getSimpleName()+".action',\r\n");
		buf.append("   				reader : { type : 'json',root : '"+ClassUtil.getLowerStartName(  cls.getSimpleName() )+"PageBeans' ,totalProperty: 'totalProperty'}   \r\n");
		buf.append("    		} , \r\n");
		buf.append("			autoLoad : false,  \r\n");
		buf.append("   			timeout: 900000,\r\n");
		buf.append("		}); \r\n");
		buf.append(  createGridPanel("		"));
		buf.append(  createSearchPane("		"));
		buf.append("		store.load({\r\n");
		buf.append("			params : {\r\n");
		buf.append("				//username : username,\r\n");
		buf.append("				start:0 ,\r\n");
		buf.append("				limit: itemsPerPage \r\n");
		buf.append(" 			}\r\n");
		buf.append("		});\r\n");
//		buf.append("/*\r\n");
		buf.append(" 		store.on('beforeload',function(){\r\n");
		buf.append("	 		Ext.apply(  store.proxy.extraParams, {\r\n");
		buf.append("").append( beforeLoadParams.toString() );
		buf.append("			})\r\n");    
		buf.append("		});\r\n");	
//		buf.append("*/\r\n");
		buf.append(  createMainPanel("		") );
		buf.append("	});\r\n");
		buf.append("</script>\r\n");
		return buf.toString();
	}	
	
	private  StringBuffer[] createSearchField(String spaceBlank){
		StringBuffer[] rtvs = new StringBuffer[2];
		StringBuffer buf = new StringBuffer();
		StringBuffer buf2 = new StringBuffer();
		String likeField = 
			"{\r\n"+
			"	xtype :'checkbox',\r\n"+
			"	fieldLabel: 'Enable Like',\r\n"+
			"	name: 'qryLikeEnable',\r\n"+
			"	id : 'qryLikeEnable',\r\n"+
			"	anchor:'95%'\r\n"+
			"}\r\n";
		int k =-1 ; 
		beforeLoadParams.append(spaceBlank).append("		").append("qryLikeEnable : Ext.getCmp(\"qryLikeEnable\").getValue(),").append("\r\n");
		for ( int i=0 ; i< fields.length ; i++ ) {
			StringBuffer str1 = new StringBuffer();
			StringBuffer str2 = new StringBuffer();
			
			boolean isDate = false; 
			Field f = fields[i];
			String fName = f.getName() ;
			fName = fName.substring(0, 1).toUpperCase() + fName.substring(1, fName.length());
			if ( fName.equalsIgnoreCase("dbid")){
				continue ; 
			}
			if ( f.getType() == int.class  || f.getType() == Integer.class || f.getType() == long.class || f.getType() == float.class || f.getType() == double.class ) {
				
				str1.append(spaceBlank).append("		        {\r\n");
				if ( f.getName().indexOf( "ref" ) != -1 ) {
					String bigBeanName = ClassUtil.getBeanNameFromRefFieldName( f.getName() );
					String smallBeanName = ClassUtil.getLowerStartName( bigBeanName );
					str1.append( spaceBlank ).append("					xtype: 'combo',\r\n");
					str1.append( spaceBlank ).append("					store: { xtype :'Ext.data.Store', fields:['dbid','name'],proxy :{ type:'ajax',url:'<%=request.getContextPath() %>/"+smallBeanName+"/list"+bigBeanName+".action', reader : { type : 'json' , root : '"+smallBeanName+"PageBeans'} } ,autoLoad: true },\r\n");
					str1.append( spaceBlank ).append("					valueField:'dbid', \r\n");
					str1.append( spaceBlank ).append("					displayField:'name', \r\n");
					str1.append( spaceBlank ).append("					fieldLabel: '" ).append(  bigBeanName ).append("'").append(",\r\n");
					
				} else {
					str1.append(spaceBlank).append("					xtype : 'numberfield',\r\n");
					str1.append(spaceBlank).append("   					fieldLabel: '"+fName+"',\r\n");
				} 
				str1.append(spaceBlank).append("   					anchor:'95%',\r\n");
				str1.append(spaceBlank).append("   					name: 'qryBeginInt"+fName+"',\r\n");
				str1.append(spaceBlank).append("   					id: 'qryBeginInt"+fName+"',\r\n");
				str1.append(spaceBlank).append("		        },\r\n");
				beforeLoadParams.append(spaceBlank).append("		").append("qryBeginInt"+fName+" : Ext.getCmp(\"qryBeginInt"+fName +"\").getValue(),").append("\r\n");
				k++;
			}
			if ( f.getType() == String.class ) {
				str1.append(spaceBlank).append("		        {\r\n");
				str1.append(spaceBlank).append("					xtype : 'textfield',\r\n");
				str1.append(spaceBlank).append("   					fieldLabel: '"+fName+"',\r\n");
				str1.append(spaceBlank).append("   					name: 'qryBeginString"+fName+"',\r\n");
				str1.append(spaceBlank).append("   					id: 'qryBeginString"+fName+"',\r\n");
				k++;
				str1.append(spaceBlank).append("   					anchor:'95%'\r\n");
				str1.append(spaceBlank).append("		        },\r\n");
				beforeLoadParams.append(spaceBlank).append("		").append("qryBeginString"+fName+" : Ext.getCmp(\"qryBeginString"+fName +"\").getValue(),").append("\r\n");
			}
			if ( f.getType() == Date.class ) {
				str1.append(spaceBlank).append("		        {\r\n");
				isDate = true ; 
				str1.append(spaceBlank).append("					xtype : 'datefield',\r\n");
				str1.append(spaceBlank).append("					format: 'Y-m-d',\r\n");
				str1.append(spaceBlank).append("   					fieldLabel: '"+fName+" From',\r\n");
				str1.append(spaceBlank).append("   					name: 'qryBeginDate"+fName+"',\r\n");
				str1.append(spaceBlank).append("   					id: 'qryBeginDate"+fName+"',\r\n");
				beforeLoadParams.append(spaceBlank).append("		").append("qryBeginDate"+fName+" : Ext.getCmp(\"qryBeginDate"+fName +"\").getRawValue(),").append("\r\n");
				str2.append(spaceBlank).append("		        {\r\n");
				str2.append(spaceBlank).append("					xtype : 'datefield',\r\n");
				str2.append(spaceBlank).append("					format: 'Y-m-d',\r\n");
				str2.append(spaceBlank).append("   					fieldLabel: '"+fName+" End',\r\n");
				str2.append(spaceBlank).append("   					name: 'qryEndDate"+fName+"',\r\n");
				str2.append(spaceBlank).append("   					id: 'qryEndDate"+fName+"',\r\n");
				str2.append(spaceBlank).append("   					anchor:'95%'\r\n");
				beforeLoadParams.append(spaceBlank).append("		").append("qryEndDate"+fName+" : Ext.getCmp(\"qryEndDate"+fName +"\").getRawValue(),").append("\r\n");
				str2.append(spaceBlank).append("		        },\r\n");
				k=k+2;
				str1.append(spaceBlank).append("   					anchor:'95%'\r\n");
				str1.append(spaceBlank).append("		        },\r\n");
			}

			if ( k%2 == 0 ){
				buf.append(str1.toString());
				if ( isDate ){
					buf2.append( str2.toString() );
				}
			} else {
				buf2.append( str1.toString() );
				if ( isDate ){
					buf.append( str2.toString() );
				}
			}
		}
		likeField = spaceBlank + likeField ; 
		rtvs[0] =  buf  ;
		rtvs[1] =  buf2.append( likeField )   ;
		return  rtvs;
	}
	private  String createSearchPane(String spaceBlank){
		StringBuffer buf = new StringBuffer();
		buf.append(spaceBlank).append("var searchPanel = Ext.create('Ext.form.Panel', {\r\n");
	    buf.append(spaceBlank).append("    defaultType: 'textfield',\r\n");
// 	    buf.append(spaceBlank).append("    border: true,\r\n");
//		buf.append(spaceBlank).append("	height : 60,\r\n");
		buf.append(spaceBlank).append("	layout: { type: 'column', align: 'stretch',padding: 5 },\r\n");
		buf.append(spaceBlank).append("	frame: true,\r\n");
	    buf.append(spaceBlank).append("    items: [{\r\n");
	    buf.append(spaceBlank).append("    	columnWidth:0.5,\r\n");
   		buf.append(spaceBlank).append("		xtype: 'container',\r\n");
   		buf.append(spaceBlank).append("		flex: 1,\r\n");
   		buf.append(spaceBlank).append("		border:false, \r\n");
   		buf.append(spaceBlank).append("		layout: 'anchor',\r\n");
   		buf.append(spaceBlank).append("		defaultType: 'textfield',\r\n");
   		buf.append(spaceBlank).append("		items: [\r\n");
   		StringBuffer[] bufArrays = createSearchField( spaceBlank );
   		buf.append(  bufArrays[0].toString() );
   		buf.append(spaceBlank).append("		]\r\n");
   		buf.append(spaceBlank).append("	},{\r\n");
		buf.append(spaceBlank).append("		columnWidth:0.5,\r\n");
   		buf.append(spaceBlank).append("		xtype: 'container',\r\n");
   		buf.append(spaceBlank).append("		flex: 1,\r\n");
   		buf.append(spaceBlank).append("		layout: 'anchor', \r\n");
   		buf.append(spaceBlank).append("		defaultType: 'textfield',\r\n");
   		buf.append(spaceBlank).append("		items: [\r\n");
   		buf.append(  bufArrays[1].toString() );
   		buf.append(spaceBlank).append("		]\r\n");
		buf.append(spaceBlank).append("	}]\r\n");
		buf.append(spaceBlank).append("	,\r\n");
		buf.append(spaceBlank).append("	buttons: [{\r\n");
	    buf.append(spaceBlank).append("        text: ' Search ',\r\n");
	    buf.append(spaceBlank).append("        handler: function() {\r\n");
	    buf.append(spaceBlank).append("            store.load();\r\n");
	    buf.append(spaceBlank).append("        }\r\n");
	    buf.append(spaceBlank).append("    },{\r\n");
	    buf.append(spaceBlank).append("        text: ' Reset ',\r\n");
	    buf.append(spaceBlank).append("        handler: function() {\r\n");
	    buf.append(spaceBlank).append("            this.up('form').getForm().reset();\r\n");
	    buf.append(spaceBlank).append("        }\r\n");
	    buf.append(spaceBlank).append("    }]\r\n");
		buf.append(spaceBlank).append(" });\r\n");
		
		return buf.toString();
	}
	
	private  String createMainPanel(String spaceBlank){
		StringBuffer buf = new StringBuffer();                                      
		buf.append(spaceBlank).append("var mainPanel =Ext.create('Ext.panel.Panel', {\r\n");
		buf.append(spaceBlank).append("	id : '" +  ClassUtil.getLowerStartName(  cls.getSimpleName() ) + "MainPanel',\r\n");
		buf.append(spaceBlank).append("	layout: { type: 'vbox', align: 'stretch',padding: 5 },\r\n");
		buf.append(spaceBlank).append("	items: [ searchPanel , gridPanel  ],\r\n");
		buf.append(spaceBlank).append("	renderTo: Ext.getBody(),\r\n");
		buf.append(spaceBlank).append("})\r\n");
		return buf.toString();
	}
}
